事件溯源 (event sourcing) 是一種保存應用程式狀態的方法:不同於傳統的 RDBMS 資料庫只儲存表格當下的狀態,事件溯源則是將每個對應用程式造成狀態變更的事件加以儲存,所以保存下來的是一連串的事件。
當應用程式需要得知其特定時間點的狀態時,可以從將這些事件加以重播,以重建出該時間點的的狀態。
從我個人的觀點,本質上,事件溯源就是一種比只儲存當下狀態更優秀的作法。用一個簡單的類比來講,如果你要保存純文字檔的程式碼,已經知道這個檔案會不停地改動,你會用什麼方式來保存?
git 對吧?事件溯源,就是把 git 的概念做進資料庫裡。
所以,它有三個非常重要的優點:
在本系列文的開頭有提到:
某位在教 DDD (domain-driven design) 的老師寫到類似的內容,他開的事件溯源的課程,學員上完課之後,跟他表示,「老師,這個事件溯源,好像不知道要如何應用?」
事件溯源確實不容易實作,因為至少有幾個難點要克服:
然而,幸運的事情是,如果選用了 Datomic,那上述的三個設計難題,都可以不用考慮,因為 Datomic 都已經設計好了,我們只需要遵循它的設計、又或是呼叫它的 API即可。
其它資源: